package com.dou.cloud.bridge.redis.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * @Author daizl
 * @Date 2024 06 19 10 56
 **/

/**
 * 分布式锁注解(不能支持在方法中获取key)
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RLock {

    /**
     * 锁的前缀(controller类的名称:方法名称:)
     *
     * @return
     */
    String keyPrefix();

    /**
     * 锁的key
     *
     * @return 默认空
     */
    String key() default "";

    /**
     * 获取锁最长等待时间
     * @return  默认0
     */
    long waitTime() default 0;

    /**
     * 锁的过期时间
     *
     * @return 默认60s
     */
    long timeOut() default 60;

    /**
     * 锁的过期时间单位
     *
     * @return 默认秒
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 是否释放锁
     *
     * @return 默认释放锁
     */
    boolean isReleaseLock() default true;

    /**
     * 锁的类型
     *  1:尝试锁
     *  2:公平锁
     *  3:读锁
     *  4:写锁
     *  5:信号量
     *  6:闭锁
     *  7:可过期性信号量
     */
    int lockType() default 1;
}
